#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{       
    // 创建三个子进程
    for(int i = 0; i < 3; i++){
        pid_t id = fork();
        if(id == 0){  // 子进程
            sleep(i + 3);  // 每个进程运行不同时间
            exit(0);
        }
    }

    // 非阻塞轮询等待它们结束
    while(1){
        // WNOHANG：不阻塞，立即返回
        pid_t ret = waitpid(-1, NULL, WNOHANG);
        if(ret > 0){
            // 有子进程结束了
            printf("子进程%d结束了\n", ret);
        }
        else if(ret == 0){
            // 子进程都还在运行
            printf("子进程们还在运行，我先做其他事...\n");
            // 这里可以做其他工作
            sleep(1);
        }
        else{
            // 没有子进程了，退出循环
            printf("所有子进程都结束了\n");
            break;
        }
    }

    return 0;
}
